﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

namespace ivv.relatorios
{
    public partial class relatorioOfertasVendasBairros : System.Web.UI.Page
    {
        List<string> referenciaAno = new List<string>();
        public string relatorio;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                SqlConnection conexaoNovaSelect = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaSelect.Open();

                string selectAno = "select distinct anoIvv FROM ivv order by anoIvv desc";

                SqlCommand cmd = new SqlCommand(selectAno, conexaoNovaSelect);
                SqlDataReader dr = cmd.ExecuteReader();

                ListItem comeco = new ListItem();

                comeco.Text = "Selecione um ano";
                comeco.Value = "nulo";

                lstAno.Items.Add(comeco);

                int cont = 0;

                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        ListItem dados = new ListItem();

                        dados.Text = dr["anoIvv"].ToString();
                        dados.Value = cont.ToString();

                        referenciaAno.Add(cont.ToString());

                        lstAno.Items.Add(dados);

                        cont++;
                    }
                }

                dr.Close();

                conexaoNovaSelect.Close();
            }
        }

        protected void lstAno_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstMes.Items.Clear();

            ListItem comeco = new ListItem();

            comeco.Text = "Selecione um mês";
            comeco.Value = "nulo";

            lstMes.Items.Add(comeco);

            for (int i = 1; i < 13; i++)
            {
                ListItem dados = new ListItem();

                dados.Text = pegarMes(i);
                dados.Value = i.ToString();

                lstMes.Items.Add(dados);
            }
        }

        string pegarMes(int mes)
        {
            string textoMes = "";

            switch (mes)
            {
                case 1: textoMes = "Janeiro";
                    break;
                case 2: textoMes = "Fevereiro";
                    break;
                case 3: textoMes = "Março";
                    break;
                case 4: textoMes = "Abril";
                    break;
                case 5: textoMes = "Maio";
                    break;
                case 6: textoMes = "Junho";
                    break;
                case 7: textoMes = "Julho";
                    break;
                case 8: textoMes = "Agosto";
                    break;
                case 9: textoMes = "Setembro";
                    break;
                case 10: textoMes = "Outubro";
                    break;
                case 11: textoMes = "Novembro";
                    break;
                default: textoMes = "Dezembro";
                    break;
            }
            return textoMes;
        }

        protected void btnGerar_Click(object sender, EventArgs e)
        {
            if (lstAno.SelectedValue != "nulo")
            {
                if (lstMes.SelectedValue != "nulo")
                {
                    list(lstAno.SelectedItem.Text, lstMes.SelectedValue);
                }
                else
                {
                    //mensagem java script
                    string literalcc = "<script language=JavaScript>mensagem('Informe o mês');</script>";
                    Panel1.Controls.Add(new LiteralControl(literalcc));
                    lstMes.Focus();
                }
            }
            else
            {
                //mensagem java script
                string literalcc = "<script language=JavaScript>mensagem('Informe o ano');</script>";
                Panel1.Controls.Add(new LiteralControl(literalcc));
                lstAno.Focus();
            }
        }

        void list(string ano, string mes)
        {
            List<string> bairroCodigo = new List<string>();
            List<double> quantidadeTotalBairroCodigoV = new List<double>();

            List<string> codigobairro = new List<string>();
            List<double> quantidadeTotalBairroCodigoO = new List<double>();

            double[] totais = new double[10];

            totais t = new totais();

            if (mes.Length == 1)
            {
                mes = "0" + mes;
            }

            relatorio = "<table id=\"relat\" width=100% border=2 cellpadding=5 cellspacing=0 bordercolor=#ffffff>";

            relatorio += "<tr>";
            relatorio += "<th colspan=\"13\">";

            relatorio += "<b>OFERTAS E VENDAS POR BAIRROS</b><br />";
            relatorio += "MERCADO IMOBILIÁRIO DA RM RECIFE - <u>IMÓVEIS RESIDENCIAIS</u><br />";
            relatorio += "" + lstMes.SelectedItem.Text + "/" + ano + " – em unidades";

            relatorio += "</th>";
            relatorio += "</tr>";

            relatorio += "<tr>";
            relatorio += "<th rowspan=\"2\">BAIRRO";
            relatorio += "</th>";
            relatorio += "<th colspan=\"6\">OFERTAS";
            relatorio += "</th>";
            relatorio += "<th colspan=\"6\">VENDAS";
            relatorio += "</th>";
            relatorio += "</tr>";


            relatorio += "<tr>";
            relatorio += "<th>1 Quarto";
            relatorio += "</th>";
            relatorio += "<th>2 Quartos";
            relatorio += "</th>";
            relatorio += "<th>3 Quartos";
            relatorio += "</th>";
            relatorio += "<th>4 Quartos ou +";
            relatorio += "</th>";
            relatorio += "<th>Unidades";
            relatorio += "</th>";
            relatorio += "<th>TOTAL (%)";
            relatorio += "</th>";
            relatorio += "<th>1 Quarto";
            relatorio += "</th>";
            relatorio += "<th>2 Quartos";
            relatorio += "</th>";
            relatorio += "<th>3 Quartos";
            relatorio += "</th>";
            relatorio += "<th>4 Quartos ou +";
            relatorio += "</th>";
            relatorio += "<th>Unidades";
            relatorio += "</th>";
            relatorio += "<th>TOTAL (%)";
            relatorio += "</th>";
            relatorio += "</tr>";

            SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
            sqlc.Open();

            string select = "select * from bairro";

            SqlCommand cmd = new SqlCommand(select, sqlc);
            SqlDataReader dr = cmd.ExecuteReader();

            double totalV = 0;
            double umQuartoV = 0;
            double doisQuartoV = 0;
            double tresQuartoV = 0;
            double maisQuatroQuartoV = 0;

            double totalO = 0;
            double umQuartoO = 0;
            double doisQuartoO = 0;
            double tresQuartoO = 0;
            double maisQuatroQuartoO = 0;

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    umQuartoV = validar(t.quantitativoDesejado(mes, ano, 4, 1, dr["codigoBairro"].ToString()));
                    doisQuartoV = validar(t.quantitativoDesejado(mes, ano, 4, 2, dr["codigoBairro"].ToString()));
                    tresQuartoV = validar(t.quantitativoDesejado(mes, ano, 4, 3, dr["codigoBairro"].ToString()));
                    maisQuatroQuartoV = validar(t.quantitativoDesejado(mes, ano, 4, 4, dr["codigoBairro"].ToString()));
                    totalV = umQuartoV + doisQuartoV + tresQuartoV + maisQuatroQuartoV;

                    umQuartoO = validar(t.quantitativoDesejado(mes, ano, 2, 1, dr["codigoBairro"].ToString()));
                    doisQuartoO = validar(t.quantitativoDesejado(mes, ano, 2, 2, dr["codigoBairro"].ToString()));
                    tresQuartoO = validar(t.quantitativoDesejado(mes, ano, 2, 3, dr["codigoBairro"].ToString()));
                    maisQuatroQuartoO = validar(t.quantitativoDesejado(mes, ano, 2, 4, dr["codigoBairro"].ToString()));
                    totalO = umQuartoO + doisQuartoO + tresQuartoO + maisQuatroQuartoO;

                    if (totalV != 0 && totalO != 0)
                    {
                        relatorio += "<tr>";
                        relatorio += "<td>" + dr["descricaoBairro"].ToString() + "</td>";
                        relatorio += "<td>" + umQuartoO + "</td>";
                        relatorio += "<td>" + doisQuartoO + "</td>";
                        relatorio += "<td>" + tresQuartoO + "</td>";
                        relatorio += "<td>" + maisQuatroQuartoO + "</td>";
                        relatorio += "<td>" + totalO + "</td>";
                        relatorio += "<th>" + dr["descricaoBairro"].ToString() + "" + dr["codigoBairro"].ToString() + "</th>";
                        relatorio += "<td>" + umQuartoV + "</td>";
                        relatorio += "<td>" + doisQuartoV + "</td>";
                        relatorio += "<td>" + tresQuartoV + "</td>";
                        relatorio += "<td>" + maisQuatroQuartoV + "</td>";
                        relatorio += "<td>" + totalV + "</td>";
                        relatorio += "<th>" + dr["codigoBairro"].ToString() + "" + dr["descricaoBairro"].ToString() + "</th>";
                        relatorio += "</tr>";

                        bairroCodigo.Add(dr["descricaoBairro"].ToString() + dr["codigoBairro"].ToString());
                        quantidadeTotalBairroCodigoO.Add(totalO);

                        codigobairro.Add(dr["codigoBairro"].ToString() + dr["descricaoBairro"].ToString());
                        quantidadeTotalBairroCodigoV.Add(totalV);

                        totais[0] += umQuartoO;
                        totais[1] += doisQuartoO;
                        totais[2] += tresQuartoO;
                        totais[3] += maisQuatroQuartoO;
                        totais[4] += totalO;

                        totais[5] += umQuartoV;
                        totais[6] += doisQuartoV;
                        totais[7] += tresQuartoV;
                        totais[8] += maisQuatroQuartoV;
                        totais[9] += totalV;
                    }
                }
            }

            dr.Close();

            relatorio += "<tr>";
            relatorio += "<th>TOTAL</th>";
            relatorio += "<th>" + totais[0] + "</th>";
            relatorio += "<th>" + totais[1] + "</th>";
            relatorio += "<th>" + totais[2] + "</th>";
            relatorio += "<th>" + totais[3] + "</th>";
            relatorio += "<th>" + totais[4] + "</th>";
            relatorio += "<th>100%</th>";
            relatorio += "<th>" + totais[5] + "</th>";
            relatorio += "<th>" + totais[6] + "</th>";
            relatorio += "<th>" + totais[7] + "</th>";
            relatorio += "<th>" + totais[8] + "</th>";
            relatorio += "<th>" + totais[9] + "</th>";
            relatorio += "<th>100%</th>";
            relatorio += "</tr>";

            relatorio += "</table>";

            relatorio += "<script type=\"text/javascript\"> ";
            relatorio += "$(function(){ ";
            relatorio += "$('table#relat tr:even').css('background','#E8E8E8'); ";
            relatorio += "}); ";
            relatorio += "</script> ";

            int i = 0;
            foreach (var item in bairroCodigo)
            {
                relatorio = relatorio.Replace(item, (Math.Round(quantidadeTotalBairroCodigoO[i] * 100 / totais[4], 1)).ToString());
                i++;
            }

            i = 0;
            foreach (var item in codigobairro)
            {
                relatorio = relatorio.Replace(item, (Math.Round(quantidadeTotalBairroCodigoV[i] * 100 / totais[9], 1)).ToString());
                i++;
            }

            sqlc.Close();

            Panel1.Controls.Add(new LiteralControl(relatorio));
            Panel1.Visible = true;
        }

        double validar(string dado)
        {
            try
            {
                return Convert.ToDouble(dado);
            }
            catch
            {
                return 0;
            }
        }
    }
}
